class Car:
    def __init__(self):
        self.current_gear = "P"  # 初始档位为停车档
        self.__valid_gears = ["P", "R", "N", "D"]  # 有效档位集合

    # 公有方法：换挡杆操作
    def shift_gear(self, target_gear):
        if target_gear not in self.__valid_gears:
            print(f"错误：{target_gear} 是无效档位！")
            return

        if self.current_gear == target_gear:
            print(f"已在 {target_gear} 档，无需换挡")
            return

        print(f"准备从 {self.current_gear} 档换至 {target_gear} 档...")
        self.__change_transmission(target_gear)  # 调用私有方法

    # 私有方法：变速箱实际操作
    def __change_transmission(self, gear):
        print(f"【变速箱】正在执行机械换挡操作...")
        self.current_gear = gear
        print(f"成功切换至 {self.current_gear} 档")


# 测试代码
my_car = Car()
my_car.shift_gear("D")  # 正常换挡
my_car.shift_gear("R")  # 需要先切回P档
my_car.shift_gear("X")  # 无效档位测试

# 尝试直接访问私有方法（会报错）
# my_car.__change_transmission("N")  # AttributeError
